import dayjs from 'dayjs'
/**
 * author:wangxinyan
 * Validation tool
 */
// 邮箱
export function isEmail(s) {
    return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
}

// 邮编
export function isPostcode(s) {
    return /^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/g.test(s)
}

// 手机号码
export function isPhone(s) {
    return /^1[0-9]{10}$/.test(s)
}

// 是否座机号码
export function isFixedphone(s) {
    return /^\d{3}-\d{8}|\d{4}-\d{7}$/g.test(s)
}

// URL地址
export function isURL(s) {
    return /^http[s]?:\/\/.*/.test(s)
}

// 身份证
export function isIdCard(s) {
    return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(s)
}

// 是否是移动端
export function isMobile() {
    var u = navigator.userAgent
    return !!u.match(/AppleWebKit.*Mobile.*/)
}

// 是否微信环境
export function isWX() {
    var u = navigator.userAgent
    return u.toLowerCase().indexOf('micromessenger') !== -1
}

// 特殊字符判断
export function isPatrn(s) {
    return /[`~!@#$%^&*_|+<>?"{}.\/;'[\]]/im.test(s)
}

// 表情符号
export function isEmojo(s) {
    return /[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/.test(s)
}

// 是否是IP地址
export function isIp(s) {
    var res = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/ // 正则表达式
    if (res.test(s)) {
        if (RegExp.$1 < 256 && RegExp.$2 < 256 && RegExp.$3 < 256 && RegExp.$4 < 256) {
            return true
        }
    }
    return false
}

// 统一社会信用代码 (营业执照)
export function isLicense(s) {
    return /^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/.test(s)
}

// 是否闰年
export function isLeapYear(year) {
    return (year % 4 == 0) && (year % 100 != 0 || year % 400 == 0)
}

// 是否迅雷链接
export function isThunderLink(s) {
    return /^thunderx?:\/\/[a-zA-Z\d]+=$/g.test(s)
}

// 手机机身吗(IMEI)
export function isIMEI(s) {
    return /^\d{15,17}$/.test(s)
}

// 密码强度
export function checkPwd(s) {
    var lvl = 0
    if (s.match(/[0-9]/)) {
        lvl++
    }
    if (s.match(/[a-zA-Z]/)) {
        lvl++
    }
    if (s.match(/[^0-9a-zA-Z]/)) {
        lvl++
    }
    if (s.length < 6) {
        lvl--
    }
    return lvl
}

// 获取指定范围内随机数
export function getRandomNumber(min, max) {
    let num = Math.floor(Math.random() * (max - min + 1)) + min
    return num
}

// 数据类型判断
export const typeOf = function(obj) {
    return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase()
}

// 防抖
export const debounce = (() => {
    let timer = null
    return (callback, wait = 800) => {
      timer && clearTimeout(timer)
      timer = setTimeout(callback, wait)
    }
})()

// 节流
export const throttle = (() => {
  let last = 0
    return (callback, wait = 800) => {
        let now = +new Date()
        if (now - last > wait) {
        callback()
        last = now
        }
    }
})()

// 转换日期为 YYYY-MM-DD HH:mm:ss 字符串
export function dateFormat(date, fmt) {
    return dayjs(date).format(fmt)
}

// export function dateFormat(date, fmt) {
//     let ret
//     let date = new Date()
//     const opt = {
//         'y+': date.getFullYear().toString(), // 年
//         'MM+': (date.getMonth() + 1).toString(), // 月
//         'dd+': date.getDate().toString(), // 日
//         'hh+': date.getHours().toString(), // 时
//         'mm+': date.getMinutes().toString(), // 分
//         'ss+': date.getSeconds().toString() // 秒
//         // 有其他格式化字符需求可以继续添加，必须转化成字符串
//     }
//     for (let k in opt) {
//         ret = new RegExp('(' + k + ')').exec(fmt)
//         if (ret) {
//             fmt = fmt.replace(ret[1], (ret[1].length === 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, '0')))
//         }
//     }
//     return fmt
// }

// 拼接url参数
export function joinUrlQuery(query = {}) {
    let queryStr = '?'
    Object.keys(query).forEach((key, idx) => {
        let joinChar = ''
        if (idx !== Object.keys(query).length - 1) {
            joinChar = '&'
        }

        queryStr += `${key}=${query[key]}${joinChar}`
    });
    return queryStr
}

// 获取url中参数
export function getParams(key) {
	let url = new URL(decodeURIComponent(window.location.href).replace(/#/gi, ''))
    return url.searchParams.get(key)
}

// 文件下载函数
export function fileDownload(url, filename) {
    function getBlob(url, cb) {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', url, true);
        xhr.responseType = 'blob';
        xhr.onload = function () {
            if (xhr.status === 200) {
                cb(xhr.response);
            }
        };
        xhr.send();
    }
    function saveAs(blob, filename) {
        if (window.navigator.msSaveOrOpenBlob) {
            navigator.msSaveBlob(blob, filename);
            return
        }
        var link = document.createElement('a');
        var body = document.querySelector('body');
        link.href = window.URL.createObjectURL(blob);
        link.download = filename;
        link.style.display = 'none';
        body.appendChild(link);
        link.click();
        body.removeChild(link);
        window.URL.revokeObjectURL(link.href);
    }
    getBlob(url, function (blob) {
        saveAs(blob, filename);
    })
}

// 手机号脱敏
export const hideMobile = (mobile) => {
  return mobile.replace(/^(\d{3})\d{4}(\d{4})$/, "$1****$2")
}
